#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>


int main()
{
    int fd = open("./log", O_CREAT | O_RDWR);
    if (fd < 0)
    {
        perror("open");
        return 1;
    }
    printf("--fd:%d\n",fd);
    close(1);
    dup2(fd,1);
    printf("--fd:%d\n",fd);
    for(;;)
    {
        char buf[1024] = {0};
        ssize_t read_size = read(0,buf,sizeof(buf) - 1);
        if (read_size < 0)
        {
            perror("read");
            break;

        }
        printf("%s",buf);
        fflush(stdout);
    }
    return 0;
}

//int main()
//{
//    close(1);
//    int fd = open("myfile",O_WRONLY | O_CREAT,00644);
//    if (fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    printf("fd:%d\n",fd);
//    fflush(stdout);
//    close(fd);
//    exit(0);
//
//}

// 文件描述符的分配规则
//int main()
//{
//    close(0);
//    //close(2)
//        
//    int fd = open("myfile", O_RDONLY);
//    if (fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    printf("fd: %d\n",fd);
//
//    close(fd);
//    return 0;
//}

//int main()
//{
//    char buf[1024];
//    ssize_t s = read(0,buf,sizeof(buf));
//    if (s > 0)
//    {
//        buf[s] = 0;
//        write(1, buf, strlen(buf));
//        write(2, buf, strlen(buf));
//    }
//    return 0;
//
//}
//


//#include <stdio.h>
//#include <sys/types.h>
//#include <sys/stat.h>
//#include <fcntl.h>
//#include <unistd.h>
//#include <string.h>
//
////读文件
//int main()
//{
//	int fd = open("myfile", O_RDONLY);
//	if (fd < 0) 
//	{
//		perror("open");
//		return 1;
//	} 
//	const char* msg = "hello xz!\n";
//	char buf[1024];
//
//	while (1) 
//	{
//		//ssize_t
//		ssize_t s = read(fd, buf, strlen(msg));//类比write
//		if (s > 0) 
//		{
//			buf[s] = 0;
//			printf("%s", buf);
//		}
//		else 
//		{
//			break;
//		}
//	} 
//
//	close(fd);
//	return 0;
//}

//#include <sys/types.h>
//#include <sys/stat.h>
//#include <fcntl.h>
//int open(const char *pathname, int flags);
//int open(const char *pathname, int flags, mode_t mode);

////写文件
//int main()
//{
//	umask(0);
//	int fd = open("myfile", O_WRONLY | O_CREAT, 0644);
//	if (fd < 0) 
//	{
//		perror("open");
//		return 1;
//	} 
//	int count = 5;
//	const char* msg = "hello xz!\n";
//	int len = strlen(msg);
//
//	while (count--) 
//	{
//		write(fd, msg, len);
//		//fd: 后面讲， msg：缓冲区首地址。
//		//len: 本次读取，期望写入多少个字节的数据。 
//		//返回值：实际写了多少字节数据
//	} 
//
//	close(fd);
//	return 0;
//}



//#include <stdio.h>
//#include <string.h>
//
//#define ONE   0001  //0000 0001
//#define TWO   0002  //0000 0001
//#define THREE 0004  //0000 0001
//
//void func(int flags)
//{
//	if (flags & ONE) 
//		printf("flags has ONE!");
//	if (flags & TWO) 
//		printf("flags has TWO!");
//	if (flags & THREE) 
//		printf("flags has THREE!");
//
//	printf("\n");
//}
//
//int main()
//{
//	func(ONE);
//	func(THREE);
//	func(ONE | THREE);
//	func(ONE | THREE | TWO);
//
//	return 0;
//}

//extern FILE *stdin;
//extern FILE *stdout;
//extern FILE *stderr;

//int main()
//{
//	const char *msg = "hello fwrite\n";
//	fwrite(msg, strlen(msg), 1, stdout);
//
//	printf("hello printf\n");
//	fprintf(stdout,"hello fprintf\n");
//
//	return 0;
//}
